Concept

Load human genome split of samples, labeling with hs1..hs4. Output matrix.
Convert to common mouse genes. Re-load into object. Load mouse genome split of samples, labeling with ms1..ms4. Subset overlapping genes. Merge all 8. Normalize and scale. Show clusters labeled by cell; split by sample. Show nCount_RNA also. Determine significantly-different list mouse vs human

hs1.data=Read10X(data.dir="./hg19/S1/outs/filtered_feature_bc_matrix/")
hs2.data=Read10X(data.dir="./hg19/S2/outs/filtered_feature_bc_matrix/")
hs3.data=Read10X(data.dir="./hg19/S3/outs/filtered_feature_bc_matrix/")
hs4.data=Read10X(data.dir="./hg19/S4/outs/filtered_feature_bc_matrix/")
ms1.data=Read10X(data.dir="./mm10/S1/outs/filtered_feature_bc_matrix/")
ms2.data=Read10X(data.dir="./mm10/S2/outs/filtered_feature_bc_matrix/")
ms3.data=Read10X(data.dir="./mm10/S3/outs/filtered_feature_bc_matrix/")
ms4.data=Read10X(data.dir="./mm10/S4/outs/filtered_feature_bc_matrix/")

#some human gene symbols have underscores (but these are not in geneTrans).
#Substitute a dot so as not to raise an error.
rownames(hs1.data)=gsub("_",".",rownames(hs1.data))
rownames(hs2.data)=gsub("_",".",rownames(hs2.data))
rownames(hs3.data)=gsub("_",".",rownames(hs3.data))
rownames(hs4.data)=gsub("_",".",rownames(hs4.data))

#rename cells
colnames(x=hs1.data) <- paste('hs1',colnames(x=hs1.data),sep="_")
colnames(x=hs2.data) <- paste('hs2',colnames(x=hs2.data),sep="_")
colnames(x=hs3.data) <- paste('hs3',colnames(x=hs3.data),sep="_")
colnames(x=hs4.data) <- paste('hs4',colnames(x=hs4.data),sep="_")
colnames(x=ms1.data) <- paste('ms1',colnames(x=ms1.data),sep="_")
colnames(x=ms2.data) <- paste('ms2',colnames(x=ms2.data),sep="_")
colnames(x=ms3.data) <- paste('ms3',colnames(x=ms3.data),sep="_")
colnames(x=ms4.data) <- paste('ms4',colnames(x=ms4.data),sep="_")

#create objects
hs1=CreateSeuratObject(counts=hs1.data,project="MG",min.cells=5)
hs2=CreateSeuratObject(counts=hs2.data,project="MG",min.cells=5)
hs3=CreateSeuratObject(counts=hs3.data,project="MG",min.cells=5)
hs4=CreateSeuratObject(counts=hs4.data,project="MG",min.cells=5)
ms1=CreateSeuratObject(counts=ms1.data,project="MG",min.cells=5)
ms2=CreateSeuratObject(counts=ms2.data,project="MG",min.cells=5)
ms3=CreateSeuratObject(counts=ms3.data,project="MG",min.cells=5)
ms4=CreateSeuratObject(counts=ms4.data,project="MG",min.cells=5)

#Use https://satijalab.org/seurat/essential_commands.html 
hg=merge(x=hs1,y=c(hs2,hs3,hs4),project="Hg")
mg=merge(x=ms1,y=c(ms2,ms3,ms4),project="Mg")

#at this point we don't need all the original sample objects--can re-create if needed
rm(hs1,hs2,hs3,hs4,hs1.data,hs2.data,hs3.data,hs4.data)
rm(ms1,ms2,ms3,ms4,ms1.data,ms2.data,ms3.data,ms4.data)

#summary of each object
print(hg)
## An object of class Seurat 
## 13283 features across 16708 samples within 1 assay 
## Active assay: RNA (13283 features)
print(mg)
## An object of class Seurat 
## 17304 features across 29055 samples within 1 assay 
## Active assay: RNA (17304 features)

Convert human genes to mouse

Output raw data to data frame. Use conversion table (geneTrans) to translate human symbols to mouse symbols.

#load gene translation table
geneTrans=read.table("geneTrans.txt",sep=",",header=T,stringsAsFactors = F,row.names = 1)

mito.m=grep("^mt",rownames(mg),value=T)
mito.h=grep("^MT-",rownames(hg),value=T)
#turns out, these two vectors (n=13 each) are ordered and match, build an extended translation table
mitoTrans=data.frame(row.names = paste("mm10",mito.m,sep="_"),
                     Human.Symbol = mito.h,
                     Homologene_ID = rep(NA,13),
                     None = rep("yes",13),
                     Mouse.Symbol = mito.m,
                     hg19 = paste("hg19",mito.h,sep="_"),
                     mm10 = paste("mm10",mito.m,sep="_")
                     )

#extended translation table
xTrans = rbind(geneTrans,mitoTrans)

#extract human raw counts into table
hg.raw=GetAssayData(hg,slot="counts")

#subset rows in geneTrans (not necessary but simpler)
hg.raw=hg.raw[row.names(hg.raw) %in% xTrans$Human.Symbol,]  #cut from 13283 to 11364 rows

#translate human symbols to mouse
hg.trans=merge(x=hg.raw,y=xTrans[,c(1,4)],by.x=0,by.y="Human.Symbol",all.x=T)
rownames(hg.trans)=hg.trans$Mouse.Symbol
hg.trans=hg.trans[,!(names(hg.trans) %in% c("Row.names","Mouse.Symbol"))]

#convert matrix back into Seurat object
hm=CreateSeuratObject(hg.trans,project="MG",min.cells=5)

#merge with mouse
hm=merge(x=hm,y=mg,project="HM")

#clean up objects no longer needed
rm(hg,mg,hg.raw,hg.trans,mito.m,mito.h)

#summarize merged object
print(hm)
## An object of class Seurat 
## 17540 features across 45763 samples within 1 assay 
## Active assay: RNA (17540 features)

Scale and normalize

Use standard workflow to calculate percent.mito (now all mouse symbols) and visualize by sample.

#filter and normalize merged object
mito.features=grep(pattern="^mt",x=rownames(x=hm),value=T)

percent.mito=Matrix::colSums(x=GetAssayData(object=hm,slot="counts")[mito.features,]) / Matrix::colSums(x=GetAssayData(object=hm,slot='counts'))
hm[['percent.mito']] = percent.mito

Diagnostic plots.

VlnPlot(object=hm,features=c("nFeature_RNA","nCount_RNA","percent.mito"),ncol=3)

FeatureScatter(object=hm,feature1 = "nCount_RNA",feature2 = "percent.mito")

FeatureScatter(object=hm,feature1 = "nCount_RNA",feature2 = "nFeature_RNA")

Scale

Print summary data before and after subsetting. Then normalize, find variable genes, and scale.

print(hm)
## An object of class Seurat 
## 17540 features across 45763 samples within 1 assay 
## Active assay: RNA (17540 features)
hm=subset(hm,nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mito < 0.05) #try > 100 & < 2500 & < .5
print(hm)
## An object of class Seurat 
## 17540 features across 17825 samples within 1 assay 
## Active assay: RNA (17540 features)
hm=NormalizeData(hm,normalization.method = "LogNormalize",scale.factor=1e4)
hm=FindVariableFeatures(hm,selection.method = 'mean.var.plot',mean.cutoff = c(0.0125,3),dispersion.cutoff = c(0.5,Inf)) #finds 4047 features
length(VariableFeatures(hm))
## [1] 4245
hm=ScaleData(hm,features=rownames(hm),vars.to.regress = c("nCount_RNA","percent.mito"))  #this takes a while
## Regressing out nCount_RNA, percent.mito
## Scaling data matrix

Dimension reduction

Start with PCA and determine how many dimensions are informative.

hm=RunPCA(hm,features=VariableFeatures(hm),verbose=T)
## PC_ 1 
## Positive:  Meg3, Syt1, Epha5, Nrxn3, Meis2, Ahi1, Snap25, Grin2b, Scg5, Arpp21 
##     Atp1b1, Celf4, Ndrg4, Il1rapl1, Snhg11, Pcp4, Plppr4, Xist, Gpm6a, Pcsk2 
##     Grm5, Synpr, Camk2b, Gria3, Gad1, Ptn, Caly, Olig1, Myt1l, Atp1a2 
## Negative:  B2m, Cd74, C1qb, Rpl13a, Spp1, C1qc, C1qa, Rpl29, Cybb, Apoc1 
##     H2-Ea-ps, C3, Cx3cr1, Fcgr4, Ifi203, Sat1, P2ry13, Ms4a6b, H2-Eb1, Ier2 
##     Ccl3, Arl5a, Angptl7, Ms4a7, Dusp1, Glipr1, Folr2, Fos, Lilrb4a, Adam28 
## PC_ 2 
## Positive:  Cd74, C1qb, C1qc, C1qa, Spp1, Apoc1, Cybb, H2-Ea-ps, C3, Cx3cr1 
##     Fcgr4, Rpl13a, Sat1, P2ry13, Ms4a6b, Rpl29, H2-Eb1, Angptl7, Arl5a, Ccl3 
##     Ms4a7, Glipr1, Folr2, Adam28, Lilrb4a, Mis18bp1, Rgs1, Tgoln2, Clec7a, Ptafr 
## Negative:  Ly6c1, Flt1, Slco1a4, Ly6a, Cldn5, Igfbp7, Id1, Itm2a, Pglyrp1, Bsg 
##     Ptprb, Abcb1a, Ctla2a, Egfl7, Adgrl4, Crip1, Klf2, Pecam1, Wfdc1, Spock2 
##     Cxcl12, Slc7a1, Ramp2, Hmcn1, Cyyr1, Pltp, Prom1, Ahnak, Foxq1, Sox17 
## PC_ 3 
## Positive:  Syt1, Snap25, Meg3, Celf4, Ndrg4, Gad1, Camk2b, Grin2b, Snhg11, Atp2b1 
##     Nrxn3, Pcp4, Myt1l, Bcl11a, Plppr4, Tmsb10, Synpr, Ano3, Slc12a5, Atp1a3 
##     Arpp21, Gria3, Gad2, C1qtnf4, Pcsk2, Nrip3, Baiap2, Syp, Epha5, Syt6 
## Negative:  Atp1a2, Slc1a2, Gja1, Clu, Car2, Ptn, Qk, Cryab, Id4, Cxcl14 
##     Sox9, Cnp, Rorb, Slc7a10, Acsl3, Gstm5, Aqp4, Cldn11, Mobp, Slc6a11 
##     Hes5, Ermn, Slc4a4, Mog, Tspan2, Ppp1r14a, Scrg1, Vegfa, Fjx1, Slc6a1 
## PC_ 4 
## Positive:  Gja1, Slc1a2, Atp1a2, Id4, Clu, Cxcl14, Sox9, Slc4a4, Rorb, Chchd10 
##     Id2, Slc7a10, Gpm6a, Tmem47, Aqp4, Fjx1, Hes5, Slc6a11, Vegfa, Acsl3 
##     Rcn2, Lhx2, Slc6a1, Gstm5, Cdh2, Sox2, Id3, Rfx4, Itih3, Ezr 
## Negative:  Mobp, Cldn11, Ermn, Mog, Tspan2, Tubb4a, Cryab, Stmn4, Mal, Sept4 
##     Ppp1r14a, Mag, Opalin, Kctd13, Cnp, Tmeff2, Nkx6-2, Dixdc1, Kcna1, Ptprd 
##     Efnb3, Stmn1, Epb41l3, Slc24a2, Edil3, Mbp, Ppp1r16b, Slain1, Anln, Aspa 
## PC_ 5 
## Positive:  Spp1, Cd74, C3, H2-Ea-ps, Ifi203, Arl5a, Apoc1, Fcgr4, Cybb, Ptn 
##     Adam28, Folr2, Lilrb4a, H2-Eb1, Glipr1, Tgoln2, Mis18bp1, Clec7a, Rpl29, Tpm1 
##     Ch25h, Naip1, Gja1, Acsl3, Olig1, Vsig4, Rnase1, Gimap4, Ms4a7, Atp1a2 
## Negative:  Hexb, Ctss, Fyb, Ctsd, Cd52, Siglech, Lyz2, Selplg, Cx3cr1, C1qa 
##     C1qc, Rhoh, Rps27rt, P2ry6, Ccl12, C1qb, Eef1g, Adap2os, Wdr89, Rgs2 
##     Rpl10-ps3, Fcrls, Cd72, Gm11361, Junb, Ccrl2, Il1b, Ms4a6c, Tnfrsf13b, Gm10073
print(hm[['pca']],dims=1:5,nfeatures=5,projected=F)
## PC_ 1 
## Positive:  Meg3, Syt1, Epha5, Nrxn3, Meis2 
## Negative:  B2m, Cd74, C1qb, Rpl13a, Spp1 
## PC_ 2 
## Positive:  Cd74, C1qb, C1qc, C1qa, Spp1 
## Negative:  Ly6c1, Flt1, Slco1a4, Ly6a, Cldn5 
## PC_ 3 
## Positive:  Syt1, Snap25, Meg3, Celf4, Ndrg4 
## Negative:  Atp1a2, Slc1a2, Gja1, Clu, Car2 
## PC_ 4 
## Positive:  Gja1, Slc1a2, Atp1a2, Id4, Clu 
## Negative:  Mobp, Cldn11, Ermn, Mog, Tspan2 
## PC_ 5 
## Positive:  Spp1, Cd74, C3, H2-Ea-ps, Ifi203 
## Negative:  Hexb, Ctss, Fyb, Ctsd, Cd52
VizDimLoadings(hm,dims=1:2)

DimPlot(hm)

hm=ProjectDim(hm)
## PC_ 1 
## Positive:  Gria2, Meg3, Pcsk1n, Scd2, Syt1, Dclk1, Epha5, Nrxn3, Meis2, Ahi1 
##     Snap25, Grin2b, Nrxn1, Dlgap1, Scg5, Arpp21, Ank2, Atp1b1, Celf4, Stmn3 
## Negative:  B2m, Tyrobp, Cd74, C1qb, Rpl13a, Spp1, Aif1, C1qc, C1qa, Ftl1 
##     Tmsb4x, Gpx1, Rpl29, Lst1, Cyba, Cybb, Apoc1, H2-Ea-ps, Laptm5, C3 
## PC_ 2 
## Positive:  Tyrobp, Cd74, C1qb, C1qc, C1qa, Spp1, Aif1, Apoc1, Cybb, Lst1 
##     H2-Ea-ps, C3, Cx3cr1, Laptm5, Fcgr4, Gpr34, Alox5ap, Rpl13a, Sat1, Fcer1g 
## Negative:  Ly6c1, Flt1, Slco1a4, Ly6a, Cldn5, Igfbp7, Id1, Itm2a, Pglyrp1, Bsg 
##     Ptprb, Abcb1a, Ctla2a, Adgrf5, Egfl7, Adgrl4, Ablim1, Crip1, Sox18, Klf2 
## PC_ 3 
## Positive:  Syt1, Snap25, Meg3, Mef2c, Celf4, Ndrg4, Gad1, Camk2b, Grin2b, Snhg11 
##     Atp2b1, Nrxn3, Pcp4, Myt1l, Bcl11a, Plppr4, Pcp4l1, Stmn3, Tmsb10, Synpr 
## Negative:  Plpp3, Atp1a2, Aldoc, Slc1a2, Gja1, Scd2, Tsc22d4, Prdx6, Ntsr2, Clu 
##     Slc1a3, Csrp1, Car2, Gpr37l1, Mt1, Mfge8, Mt2, Glul, F3, Pantr1 
## PC_ 4 
## Positive:  Gja1, Slc1a2, Mt3, Mt2, Atp1a2, Id4, Aldoc, Plpp3, Sparcl1, Slc1a3 
##     Ntsr2, Clu, S1pr1, Cxcl14, Sox9, Prdx6, Atp1b2, Ptprz1, Gm3764, Mfge8 
## Negative:  Plp1, Mobp, Cldn11, Ermn, Mog, Tspan2, Tubb4a, Cryab, Stmn4, Mal 
##     Sept4, Ppp1r14a, Mag, Opalin, Tmem88b, Ugt8a, Kctd13, Cnp, Tmeff2, Nkx6-2 
## PC_ 5 
## Positive:  Spp1, Cd74, Neat1, C3, H2-Ea-ps, Ifi203, Arl5a, Apoc1, Gpm6b, Fcgr4 
##     A2m, Cybb, Ptn, Adam28, H2-DMb1, Fcgrt, Folr2, Lilrb4a, Ptprz1, Htra1 
## Negative:  Hexb, Ctss, Fyb, Ctsd, Cd52, Siglech, Rnase4, Rpl17, Vsir, Cd300c2 
##     Lgmn, Tmem119, Fcgr3, Rps17, Lyz2, Selplg, Ctsz, Mafb, Rack1, Ptpn18
DimHeatmap(hm,dims=1,cells=500,balanced=T)

DimHeatmap(hm,dims=1:6,cells=500,balanced=T)

hm=JackStraw(hm,num.replicate=100)
hm=ScoreJackStraw(hm,dims=1:20)
JackStrawPlot(hm,dims=1:20)
## Warning: Removed 59420 rows containing missing values (geom_point).

ElbowPlot(hm)

Start clustering

#start clustering
hm=FindNeighbors(hm,dims=1:13) #adjust dims based on plots
## Computing nearest neighbor graph
## Computing SNN
hm=FindClusters(hm,resolution=0.2)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 17825
## Number of edges: 643011
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9763
## Number of communities: 17
## Elapsed time: 5 seconds
table(Idents(hm))
## 
##    0    1    2    3    4    5    6    7    8    9   10   11   12   13   14 
## 2237 1905 1662 1655 1542 1524 1056 1035 1010  997  982  549  529  486  364 
##   15   16 
##  247   45

Find tSNE projection and add to object

hm=RunTSNE(hm,dims=1:13)
DimPlot(hm,reduction='tsne')

DimPlot(hm,reduction='tsne',split.by='orig.ident')

FeaturePlot(hm,features='Spp1')

FeaturePlot(hm,features='Hexb')

FeaturePlot(hm,features='nCount_RNA')

UMAP

hm=RunUMAP(hm,dims = 1:13)
DimPlot(hm,reduction='umap')

FeaturePlot(hm,features='Spp1')

FeaturePlot(hm,features='Hexb')

#FeaturePlot(hm,features='nCount_RNA',split.by='orig.ident')
FeaturePlot(hm,features='nCount_RNA')

Label clusters

Use top 2 genes from prior clustering to do this, following

hm.markers=FindAllMarkers(hm,only.pos=T,min.pct = .25,logfc.threshold = .25)
## Calculating cluster 0
## Calculating cluster 1
## Calculating cluster 2
## Calculating cluster 3
## Calculating cluster 4
## Calculating cluster 5
## Calculating cluster 6
## Calculating cluster 7
## Calculating cluster 8
## Calculating cluster 9
## Calculating cluster 10
## Calculating cluster 11
## Calculating cluster 12
## Calculating cluster 13
## Calculating cluster 14
## Calculating cluster 15
## Calculating cluster 16
hm.markers %>% group_by(cluster) %>% top_n(10,avg_logFC)
## # A tibble: 170 x 7
## # Groups:   cluster [17]
##    p_val avg_logFC pct.1 pct.2 p_val_adj cluster gene  
##    <dbl>     <dbl> <dbl> <dbl>     <dbl> <fct>   <chr> 
##  1     0      2.81 0.992 0.262         0 0       Mt1   
##  2     0      2.76 0.948 0.075         0 0       Aldoc 
##  3     0      2.63 0.937 0.066         0 0       Plpp3 
##  4     0      2.59 0.889 0.057         0 0       Clu   
##  5     0      2.42 0.971 0.163         0 0       Slc1a3
##  6     0      2.41 0.848 0.039         0 0       Ntsr2 
##  7     0      2.29 0.758 0.038         0 0       Mfge8 
##  8     0      2.27 0.983 0.138         0 0       Atp1a2
##  9     0      2.26 0.908 0.116         0 0       Prdx6 
## 10     0      2.22 0.781 0.049         0 0       Gm3764
## # … with 160 more rows

Save top 5 list

hm.markers %>% group_by(cluster) %>% top_n(5,avg_logFC) %>% write.csv("Top 5 per cluster.csv",row.names = F)
hm.markers %>% group_by(cluster) %>% top_n(5,avg_logFC) %>% as.data.frame %>% paged_table

Identify human and mouse microglial clusters

Use Spp1 and Hexb to identify cluster number for human and mouse microglia, respectively.

humClus=as.character(subset(hm.markers,gene=="Spp1")$cluster)
print(humClus)
## [1] "1"
musClus=as.character(subset(hm.markers,gene=="Hexb")$cluster)
print(musClus)
## [1] "3"  "8"  "16"

Find genes differentially expressed between human and mouse microglia

diffGenes=FindMarkers(hm,ident.1=humClus,ident.2=musClus,min.pct=0.1)

Display summary of differentiall expressed genes

table(sig=diffGenes$p_val_adj <= 0.05, twofold=abs(diffGenes$avg_logFC) >= 1)
##        twofold
## sig     FALSE TRUE
##   FALSE    51    0
##   TRUE   1134  182
diffGenes %>% tibble::rownames_to_column() %>% filter(p_val_adj <= 0.05) %>% filter(abs(avg_logFC) >= 1) %>% paged_table

Save differential expressed list as object (for later use in R) and csv (as text to preserve gene names)

saveRDS(diffGenes,"each_genome_diffGenes.rds")
write.table(as.data.frame(diffGenes),"each_genome_diffGenes.csv.txt",sep=",",quote=T)

Cluster Averages

hm.mean=AverageExpression(hm)
## Finished averaging RNA for cluster 0
## Finished averaging RNA for cluster 1
## Finished averaging RNA for cluster 2
## Finished averaging RNA for cluster 3
## Finished averaging RNA for cluster 4
## Finished averaging RNA for cluster 5
## Finished averaging RNA for cluster 6
## Finished averaging RNA for cluster 7
## Finished averaging RNA for cluster 8
## Finished averaging RNA for cluster 9
## Finished averaging RNA for cluster 10
## Finished averaging RNA for cluster 11
## Finished averaging RNA for cluster 12
## Finished averaging RNA for cluster 13
## Finished averaging RNA for cluster 14
## Finished averaging RNA for cluster 15
## Finished averaging RNA for cluster 16
head(hm.mean$RNA)
##                0          1          2           3          4           5
## A1bg  0.00000000 0.56305489 0.00000000 0.000000000 0.00000000 0.000000000
## A2m   0.11128453 5.14825347 0.04222694 0.004824921 0.05201140 0.292002607
## Aaas  0.02865456 0.11695458 0.07615790 0.051055974 0.15252326 0.095749236
## Aacs  0.19356584 0.03811685 0.01334112 0.047633146 0.00000000 0.020241924
## Aagab 0.10126996 0.07900196 0.00000000 0.275244651 0.01123814 0.005730725
## Aak1  0.55694807 1.93896481 0.16098873 0.306200938 0.30789077 0.198415564
##                6          7           8          9         10          11
## A1bg  0.00000000 0.00000000 0.019375714 0.00000000 0.00000000 0.013180128
## A2m   0.01282256 0.04333931 0.056720859 0.02003860 0.09848819 1.024299489
## Aaas  0.07652078 0.09078195 0.047276461 0.01794212 0.02609782 0.060312343
## Aacs  0.03237385 0.02673466 0.000000000 0.04105902 0.01137799 0.003974457
## Aagab 0.11363978 0.04796781 0.003255834 0.10641353 0.01200756 0.053667109
## Aak1  0.50280820 0.45042991 0.096336922 1.32870780 0.07713375 0.161762042
##               12         13         14         15         16
## A1bg  0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
## A2m   0.02855496 0.08707676 1.00022286 0.01003366 0.06499626
## Aaas  0.08066259 0.06116061 0.00000000 0.06733763 0.08547009
## Aacs  0.04049259 0.05985941 0.02504332 0.00000000 0.00000000
## Aagab 0.12772428 0.02056898 0.06477716 0.02372387 0.00000000
## Aak1  0.34711018 0.53488229 0.24607410 0.40490546 0.65197454
write.csv(hm.mean$RNA,"hm cluster averages.csv.txt")

Show species by original split

#stash idents 
hm[["old.ident"]]=Idents(hm)
#get vector of cell idents
all.cells=Cells(hm)
#split by species
hg.cells=grep("^h",all.cells,value=T)
mm.cells=grep("^m",all.cells,value=T)
#apply new idents
Idents(hm,cells=hg.cells)="Human"
Idents(hm,cells=mm.cells)="Mouse"
table(hm$orig.ident,Idents(hm))
##      
##       Mouse Human
##   hs1     0  2419
##   hs2     0  1463
##   hs3     0  2633
##   hs4     0  2912
##   ms1  1921     0
##   ms2   842     0
##   ms3  3530     0
##   ms4  2105     0

Plot tsne labeled by species no legend

DimPlot(hm,label=T,repel=T,label.size=8,reduction = "tsne")+NoLegend()

Plot nCounts in tsne labeled by species

FeaturePlot(hm,features='nCount_RNA',reduction = "tsne")

FeaturePlot(hm,features='nCount_RNA',reduction = "tsne",split.by="ident")

Session Info

sessionInfo()
## R version 3.5.3 (2019-03-11)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.2 LTS
## 
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3
## LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] rmarkdown_1.12    dplyr_0.8.0.1     Seurat_3.0.0.9000
## 
## loaded via a namespace (and not attached):
##  [1] nlme_3.1-137        tsne_0.1-3          bitops_1.0-6       
##  [4] RColorBrewer_1.1-2  httr_1.4.0          tools_3.5.3        
##  [7] utf8_1.1.4          R6_2.4.0            irlba_2.3.3        
## [10] KernSmooth_2.23-15  lazyeval_0.2.2      colorspace_1.4-1   
## [13] npsurv_0.4-0        withr_2.1.2         tidyselect_0.2.5   
## [16] compiler_3.5.3      cli_1.1.0           plotly_4.9.0       
## [19] labeling_0.3        caTools_1.17.1.2    scales_1.0.0       
## [22] lmtest_0.9-36       ggridges_0.5.1      pbapply_1.4-0      
## [25] stringr_1.4.0       digest_0.6.18       R.utils_2.8.0      
## [28] pkgconfig_2.0.2     htmltools_0.3.6     bibtex_0.4.2       
## [31] htmlwidgets_1.3     rlang_0.3.4         zoo_1.8-5          
## [34] jsonlite_1.6        ica_1.0-2           gtools_3.8.1       
## [37] R.oo_1.22.0         magrittr_1.5        Matrix_1.2-17      
## [40] Rcpp_1.0.1          munsell_0.5.0       fansi_0.4.0        
## [43] ape_5.3             reticulate_1.12     R.methodsS3_1.7.1  
## [46] stringi_1.4.3       yaml_2.2.0          gbRd_0.4-11        
## [49] MASS_7.3-51.1       gplots_3.0.1.1      Rtsne_0.15         
## [52] plyr_1.8.4          grid_3.5.3          parallel_3.5.3     
## [55] gdata_2.18.0        listenv_0.7.0       ggrepel_0.8.0      
## [58] crayon_1.3.4        lattice_0.20-38     cowplot_0.9.4      
## [61] splines_3.5.3       SDMTools_1.1-221    knitr_1.22         
## [64] pillar_1.3.1        igraph_1.2.4        future.apply_1.2.0 
## [67] codetools_0.2-16    glue_1.3.1          evaluate_0.13      
## [70] lsei_1.2-0          metap_1.1           data.table_1.12.2  
## [73] png_0.1-7           Rdpack_0.11-0       gtable_0.3.0       
## [76] RANN_2.6.1          purrr_0.3.2         tidyr_0.8.3        
## [79] future_1.12.0       assertthat_0.2.1    ggplot2_3.1.1      
## [82] xfun_0.6            rsvd_1.0.0          survival_2.43-3    
## [85] viridisLite_0.3.0   tibble_2.1.1        cluster_2.0.8      
## [88] globals_0.12.4      fitdistrplus_1.0-14 ROCR_1.0-7